;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
; Use of this sample source code is subject to the terms of the Microsoft
; license agreement under which you licensed this sample source code. If
; you did not accept the terms of the license agreement, you are not
; authorized to use this sample source code. For the terms of the license,
; please see the license agreement between you and Microsoft or, if applicable,
; see the LICENSE.RTF on your install media or the root of your tools installation.
; THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
;
;
; (C) Copyright 2006 Marvell International Ltd.
; All Rights Reserved
;
;
; INTEL CONFIDENTIAL
; Copyright 2004-2005 Intel Corporation All Rights Reserved.
;
; The source code contained or described herein and all documents
; related to the source code (Material) are owned by Intel Corporation
; or its suppliers or licensors.  Title to the Material remains with
; Intel Corporation or its suppliers and licensors. The Material contains
; trade secrets and proprietary and confidential information of Intel
; or its suppliers and licensors. The Material is protected by worldwide
; copyright and trade secret laws and treaty provisions. No part of the
; Material may be used, copied, reproduced, modified, published, uploaded,
; posted, transmitted, distributed, or disclosed in any way without Intel's
; prior express written permission.
;
; No license under any patent, copyright, trade secret or other intellectual
; property right is granted to or conferred upon you by disclosure or
; delivery of the Materials, either expressly, by implication, inducement,
; estoppel or otherwise. Any license under such intellectual property rights
; must be express and approved by Intel in writing.
;
;
;*********************************************************************************
;
	INCLUDE xlli_monahans_defs.inc
	EXPORT  XllpXSC1EnterTurbo  
	EXPORT  XllpXSC1ExitTurbo
	EXPORT  XllpXSC1ReadCLKCFG
	EXPORT  XllpXSC1ChangeVoltage
	EXPORT  XllpXSC1FreqChange
	
	AREA    |.text|, CODE, READONLY, ALIGN=5        ; Align =5 required for "ALIGN 32" to work
;
; XllpXSC1EnterTurbo - Enters Turbo Mode
;
;   Uses r0 - contains value for writing to PWRMODE coprocessor register
;   
;	Preserve the Fast Bus Mode, B bit.
;
XllpXSC1EnterTurbo   FUNCTION

	mrc		p14, 0, r0, c6, c0, 0			; read c6
	and     r0,  r0, #0xd                   ; clear F bit
	orr		r0, r0, #1						; or in Turbo bit
	mcr		p14, 0, r0, c6, c0, 0			; enter Turbo mode
      IF Interworking :LOR: Thumbing
         bx  lr
      ELSE
         mov  pc, lr          ; return
      ENDIF

;
; XllpXSC1ExitTurbo - Exits Turbo Mode
;
;   Uses r0 - contains value for writing to PWRMODE coprocessor register   
;
;	Preserve the Fast Bus Mode, B bit.
;
XllpXSC1ExitTurbo   FUNCTION

	mrc		p14, 0, r0, c6, c0, 0			; read c6
	and		r0, r0, #0xe					; clear Turbo bit to
	mcr		p14, 0, r0, c6, c0, 0			; exit Turbo mode
      IF Interworking :LOR: Thumbing
         bx  lr
      ELSE
         mov  pc, lr          ; return
      ENDIF

;
;XllpXSC1ReadCLKCFG - Reads CCLKCFG register
;
;   Uses r0 - contains return value -> CCLKCFG register contents
;
XllpXSC1ReadCLKCFG   FUNCTION

	mrc		p14, 0, r0, c6, c0, 0			; Read CCLKCFG

	IF Interworking :LOR: Thumbing
	  bx  lr
	ELSE
	  mov  pc, lr          ; return
	ENDIF

;
; XllpXSC1ChangeVoltage - change voltage
;
;   Uses r0 - contains value for writing to PWRMODE coprocessor register   
;
;	
;
XllpXSC1ChangeVoltage	FUNCTION

	mrc		p14, 0, r0, c7, c0, 0			; read c7
	orr  	r0, r0, #0x8					; Voltage change sequence begins
	mcr		p14, 0, r0, c7, c0, 0			; exit Turbo mode
      IF Interworking :LOR: Thumbing
         bx  lr
      ELSE
         mov  pc, lr          ; return
      ENDIF

XllpXSC1FreqChange	FUNCTION
;
; XSC1FreqChange - Do a Frequency Change
;
;       Uses    
;            r0 - arg1 - mask to set the CLKCFG register
;	          	 
	orr		r0, r0, #2						; set F=1				
	mcr		p14, 0, r0, c6, c0, 0			; do Freq Change
	
FreqRet
	 
	IF Interworking :LOR: Thumbing
		bx  lr
	ELSE
		mov  pc, lr          ; return
	ENDIF

	ENDFUNC
 END

